//
//  TestTableViewController.m
//  Demo
//
//  Created by yc on 2017/11/13.
//  Copyright © 2017年 lc4y. All rights reserved.
//

#import "TestTableViewController.h"
#import "TestTableViewHeader.h"

/***
    该封装只是针对于常用tableView的用法,其他特殊使用以后再添加
 
    该demo意在减少tableView在viewController中的代码   collectionView的用法基本一致
    有不足之处还请见谅
 
    //该封装用法
        对应的标号见整个工程中的#warning
        1.创建viewController继承CYListViewController
        2.创建view继承CYListView或者CYCollectionView
        3.重写父类方法cy_configSubView调用
            - (void)cy_createListView:(NSString *)listViewClass viewType:(CYListViewType)viewType
          选择创建tableView或者collectionView
          如果是tableView默认样式Plain
          如果是collectionView默认布局样式flowLayout
          如果希望改变样式或者布局请调用
          - (void)cy_createListView:(Class)listViewClass listViewStyle:(UITableViewStyle)listStyle
          或者
          - (void)cy_createCollectionView:(Class)listViewClass collectionViewLayout:(UICollectionViewFlowLayout *)layout
        4.重写cy_configSubViewStyle方法配置列表
          注册列表cell    cy_registerCellNib(UINib)   cy_registerCellClass(Class)
                    (支持多种cell,多种cell要在步骤2的view中调用
                        - (NSString *)cy_cellIDWithIndexPath:(NSIndexPath *)indexPath
                    返回cellID)  所有除了事件相关的代理方法都写在步骤2的view中 不能在VC中实现
          注册列表sectionHeader cy_registerHeaderNib  cy_registerHeaderClass(多种sectionHeader和cell一致 调用对应的代理方法)
          注册列表sectionFooter cy_registerFooterNib  cy_registerFooterClass(多种sectionHeader和cell一致 调用对应的代理方法)
 
          列表tableHeader   cy_setTableViewHeaderView
 
          下拉控件          cy_addHeaderRefreshControl
          下拉控件          cy_addFooterRefreshMoreControl
          上下拉控件结束刷下  cy_endRefreshControl
 
       5.空白页面     可以使用cy_noDataTitleN 设置空页面提示文字
                    可以使用cy_noDataImageN 设置空页面提示图片
 
       6.刷新数据    如果是网络请求数据 直接将数据赋值给 cy_dataArray 则列表自动刷新
                    如果不需要改变数据刷新数据 则调用 cy_listViewReloadView 方法直接刷新
 
        注:所有列表需要特殊处理需要自己在步骤2中的view中 自己实现想要的tableView或者collectionView的代理方法
***/

#define kScreenWidth    [UIScreen mainScreen].bounds.size.width
#define kScreenHeight   [UIScreen mainScreen].bounds.size.height
@interface TestTableViewController ()
@property (nonatomic ,strong)TestTableViewHeader *headerView;
@end

@implementation TestTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

#pragma mark -
#pragma mark - ConfigSubView

#warning 3.重写父类方法cy_configSubView调用
- (void)cy_configSubView {
    //listview : 需要传一个继承自CYListView的子类进去,哪怕子类中一句代码也不写
    // 如果不需要列表 就可以不用调用cy_createXXXX方法创建  和普通viewController使用一样
    [self cy_createListView:@"TestTableListView" listViewStyle:1];
}

#warning 4.重写cy_configSubViewStyle方法配置列表
- (void)cy_configSubViewStyle {
    //注册cell
    [self.cy_listView cy_registerCellNib:@"TestTableListViewCell"];
    [self.cy_listView cy_registerCellNib:@"TestTableViewCellSec"];  //第二种cell 区分不同的cell方法在 TestTableListView 中
    [self.cy_listView cy_registerHeaderNib:@"TestTableHeaderView"];
    [self.cy_listView cy_registerFooterClass:@"TestTableFooterView"];
    
    [self.cy_listView cy_setTableViewHeaderView:self.headerView];
    
    [self.cy_listView cy_addHeaderRefreshControl:^{
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self.cy_listView cy_endRefreshControl];
            
            //刷新数据
#warning 6.刷新数据    如果是网络请求数据 直接将数据赋值给 cy_dataArray 则列表自动刷新
            self.cy_listView.cy_dataArray = @[];
        });
    }];
    
    [self.cy_listView cy_addFooterRefreshMoreControl:^{
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self.cy_listView cy_endRefreshControl];
        });
    }];
    
    // 刷新数据   模拟数据tableView中不适用数据
    // 设置数据会自动刷新tableView 如果不需要数据刷新tableView 调用cy_listViewReloadView
    self.cy_listView.cy_dataArray = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10"];
    
#warning 5.空白页面  可以使用cy_noDataTitleN 设置提示文字
    self.cy_listView.cy_noDataTitleN = @"你想要什么样的图片以及提示语自己设置,默认是暂无数据";
}

- (void)cy_masLayoutSubView {
    [self.cy_listView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.mas_equalTo(0);
        make.bottom.mas_equalTo(0);
    }];
}

// 点击cell事件功能
// 如果需要在TestTableListView  则自己实现tableView的 didSelect 方法 并且调用[super didSelect] 方法
- (void)cy_didSelectCellRow:(NSIndexPath *)rowIndexPath {
    NSLog(@"cell点击事件");
}

// 左划删除功能  已经实现该功能
- (void)cy_editCellRow:(NSIndexPath *)rowIndexPath menuIndex:(NSInteger)menuIndex {
    if ( menuIndex == 0 ) {
        NSLog(@"删除");
    }else {
        NSLog(@"编辑");
    }
}

- (TestTableViewHeader *)headerView {
    if (!_headerView) {
        _headerView = [[TestTableViewHeader alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)];
    }
    return _headerView;
}
@end
